package phan.connection;

import phan.connection.StringFormat;
import java.sql.SQLException;
import java.util.Date;
import java.util.*;
import phan.connection.MySQLDBConnector;

public class InscriptionBean {

    private static String DATE_FORMAT_PATTERN = "yyyy-MM-dd";
    private String notify;
    private Hashtable errors;
    private String login;
    private String motDePasse;
    private String confirm_pass;
    private String nom;
    private String prenom;
    private String email;
    private String adress;
    private String ville;
    private String postal;
    private String pays;
    private String tel;
    private String description;
    private int roleID;
    private int activeAcc;
    private String an;
    private String jour;
    private String mois;
    private String numero;
     private String key;
//***********************************************

    public boolean validate() {
        System.out.print("email la: " + email);
        CheckString _checkmail= new CheckString();
      boolean check =  _checkmail.CheckEmail(email);
        MySQLDBConnector con = new MySQLDBConnector();
    boolean exist = con.checkUserName(login);
        boolean allOk = true;
        int annee = 0;
        // String selected=isRbSelected(notify);
        if (!getAn().equals("") && getAn()!= null) {
            try{
                // int y = Integer.parseInt(an);
                annee = Integer.parseInt(getAn());
             }

            catch (NumberFormatException e) {
                errors.put("an","année ne contient que des chiffres");
                an="";
                return false;
            }
            
        }

        boolean sup18 = true;

     
        if (numero.equals("")) {
            errors.put("numero", "Veuillez saisir les caractères tel que pésenté");
            numero = "";
            allOk = false;
        }
        if (!numero.equals(key)&&!numero.equals("")) {
            errors.put("numero", " Veuillez saisir les caractères tel que pésenté ");
            numero = "";
            allOk = false;
        }
        if (mois.equals("--mois--")) {
            errors.put("mois", "Choisir votre mois de naissance SVP  ");
            mois = "--mois--";
            allOk = false;
        }
        if (jour.equals("--jour--")) {
            errors.put("jour", "Choisir votre  de naissance SVP  ");
            jour ="--jour--";
            allOk = false;
        }

         if (getAn().equals("")) {
            System.out.println("An = null");
            errors.put("an", "Entrer votre année de naissance");
            allOk = false;
        }
         if(!an.equals("")&&!mois.equals("")&&!jour.equals("")){

             try{
                 int y = Integer.parseInt(an);
             }

            catch (NumberFormatException e) {
                errors.put("an","année ne contient que des chiffres");
                an="";
                return false;
            }
            sup18 =   _checkmail.CheckOver18(an, mois, jour);
         }

        if (!sup18) {

            errors.put("an", "Vous avez moins de 18 ans");
            an="";
            allOk = false;
        }
        if (notify.equals("Non")) {
            System.out.println("loi o day");
            errors.put("notify", " Vous n'avez pas accepté les conditions ");
            allOk = false;
        }

        if (exist) {
            errors.put("login_exist", " Votre Pseudo existe déjà  ");
            allOk = false;
        }
        if (nom.equals("")) {
            errors.put("nom", "Entrer votre nom SVP  ");
            nom = "";
            allOk = false;
        }
        if (prenom.equals("")) {
            errors.put("prenom", "Entrer votre prenom SVP  ");
            prenom = "";
            allOk = false;
        }
        if (email.equals("") ) {
            errors.put("email", "Entrer un  email valide SVP  ");
            email = "";
            allOk = false;
        }
        if (!check) {
            errors.put("email", "Entrer un  email valide SVP  ");
            email = "";
            allOk = false;
        }
        if (adress.equals("")) {
            errors.put("adress", "Entrer votre adresse SVP  ");
            adress = "";
            allOk = false;
        }
        if (ville.equals("")) {
            errors.put("ville", "Entrer la ville SVP  ");
            ville = "";
            allOk = false;
        }
        if (pays.equals("")) {
            errors.put("pays", "Entrer le champs pays SVP  ");
            pays = "";
            allOk = false;
        }
     
        if (login.equals("")) {
            errors.put("login", "Entrer votre pseudo SVP ");
            login = "";
            allOk = false;
        }
        if (!login.equals("")) {
            if ((login.length() < 6 || login.length() > 15)) {
                errors.put("login", " Votre pseudo doit contenir entre 6 et 15 catactères ");
                login = "";
                allOk = false;
            }
        }
        if (motDePasse.equals("")) {
            errors.put("motDePasse", "Entrer un mot de passe valide");
            motDePasse = "";
            allOk = false;
        }
         if (!motDePasse.equals("")) {
        if ((motDePasse.length() < 6 || motDePasse.length() > 15) ) {
            errors.put("motDePasse", " Votre mot de passe doit contenir entre 6 et 15 catactères ");
            motDePasse = "";
            allOk = false;
        }}
        if (!motDePasse.equals("") && (confirm_pass.equals("") || !motDePasse.equals(confirm_pass))) {
            System.out.print("motDePasse   " + motDePasse);
            System.out.print("confirm_pass   " + confirm_pass);
            errors.put("confirm_pass", "Confirmez votre mot de passe SVP ");
            confirm_pass = ""; motDePasse="";
            System.out.print("loi o day");
            allOk = false;
        }
        else {
            try {
                int x = Integer.parseInt(postal);
               
            } catch (NumberFormatException e) {
                errors.put("postal", "Entrer le code postal valide svp");
             //   errors.put("an","année ne contient que des chiffres");
                postal = "";
                an="";
                allOk = false;
            }
        }
        return allOk;
    }

    public String getErrorMsg(String s) {
        String errorMsg = (String) errors.get(s.trim());
        return (errorMsg == null) ? "" : errorMsg;
    }

    public void setErrors(String key, String msg) {
        errors.put(key, msg);
    }


//************************************************
    public InscriptionBean() {
        numero="";
        an = "";
        nom = "";
        prenom = "";
        email = "";
        adress = "";
        ville = "";
        pays = "";
        tel = "";
        login = "";
        motDePasse = "";
        confirm_pass = "";
        postal = "";
        notify = "";
        key="";
        errors = new Hashtable();

    }

    public String getNom() {
        return this.nom;
    }

    public void setNom(String valeur) {
        this.nom = valeur;
    }

    public String getPrenom() {
        return this.prenom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public String getMotDePasse() {
        return this.motDePasse;
    }

    public void setMotDePasse(String motDePasse) {
        this.motDePasse = motDePasse;
    }

    public String getConfirm_Pass() {
        return this.confirm_pass;
    }

    public void setConfirm_Pass(String c) {
        this.confirm_pass = c;
    }

    public String getLogin() {
        return this.login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAdress() {
        return this.adress;
    }

    public void setAdress(String adr) {
        this.adress = adr;
    }

    public String getPostal() {
        return this.postal;
    }

    public void setPostal(String pos) {
        this.postal = pos;
    }

    public String getPays() {
        return this.pays;
    }

    public void setPays(String pays) {
        this.pays = pays;
    }

    public String getTel() {
        return this.tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getVille() {
        return this.ville;
    }

    public void setVille(String ville) {
        this.ville = ville;
    }

    public int getRole() {
        return this.roleID;
    }

    public void setRole(int role) {
        this.roleID = role;
    }

    public String getDescription() {
        return this.description;
    }

    public void setNotes(String notes) {
        this.description = notes;
    }

    public int getActiveAcc() {
        return this.activeAcc;
    }

    public void setActiveAcc(int acc) {
        this.activeAcc = acc;
    }

    public String isRbSelected(String s) {
        return (notify.equals(s)) ? "checked" : "";
    }

    public String getNotify() {
        return notify;
    }

    public void setNotify(String n) {
        notify = n;
    }

    public boolean isSup18(int birthday) {
        boolean sup = true;
        Date today = new Date();
        int year = (int) today.getYear() + 1900;
        System.out.print("nam sinh=" + birthday);
        if ((birthday + 18) <= year) {
            sup = false;
        }
        return sup;
    }

    /**
     * @return the an
     */
    public String getAn() {
        return an;
    }

    /**
     * @param an the an to set
     */
    public void setAn(String an) {
        this.an = an;
    }

    /**
     * @return the jour
     */
    public String getJour() {
        return jour;
    }

    /**
     * @param jour the jour to set
     */
    public void setJour(String jour) {
        this.jour = jour;
    }

    /**
     * @return the mois
     */
    public String getMois() {
        return mois;
    }

    /**
     * @param mois the mois to set
     */
    public void setMois(String mois) {
        this.mois = mois;
    }

    /**
     * @return the numero
     */
    public String getNumero() {
        return numero;
    }

    /**
     * @param numero the numero to set
     */
    public void setNumero(String numero) {
        this.numero = numero;
    }

    /**
     * @return the key
     */
    public String getKey() {
        return key;
    }

    /**
     * @param key the key to set
     */
    public void setKey(String key) {
        this.key = key;
    }
}
